﻿'use strict';
var debug = require('debug');
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var http = require('http');
var WebSocket = require('ws');
var url = require('url')
var server_status = require("./websocket.js")
var MongoClient = require('mongodb').MongoClient;
var chart = require('./chart.js')

var config = require('./config.json')
//var server_list = require("./server.json")

var routes = require('./routes/index');
var users = require('./routes/users');
var admin = require('./routes/admin');

var app = express();

//initialize a simple http server
const server = http.createServer(app);

//initialize the WebSocket server instance
const wss = new WebSocket.Server({
    server: server
});
//var timer;
// var db = new MongoClient(config["mongo"]);
// var connection = db.connect();
wss.on('connection', (ws, req) => {
    const location = url.parse(req.url, true);
    ws.path = location.path;
    console.log(location.path)
    //connection is up, let's add a simple simple event
    ws.on('message', (message) => {
        //log the received message and send it back to the client
    });
    var timer =  setInterval(() => {
        //console.log(server_status)
        ws.send(JSON.stringify(server_status))
    }, 1000);
});

// wss.on('error', function () {
//     console.log('socket error');
//     //connect()
// });

// wss.on('close', function () {
//     console.log('socket close');
//     wss.terminate();
//     clearInterval(timer);
//     //connect()
// });

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

// uncomment after placing your favicon in /public
//app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: false
}));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);
app.use('/users', users);
app.use('/admin', admin);

// catch 404 and forward to error handler
app.use(function (req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
    app.use(function (err, req, res, next) {
        res.status(err.status || 500);
        res.render('error', {
            message: err.message,
            error: err
        });
    });
}

// production error handler
// no stacktraces leaked to user
app.use(function (err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
        message: err.message,
        error: {}
    });
});

//start our server
server.listen(process.env.PORT || 3000, () => {
    console.log(`Server started on port ${server.address().port} :)`);
});